﻿#ifndef _NUIBird_h_
#define _NUIBird_h_


#include "NUIAnimal.h"
#include <vector>
using namespace std;

namespace NUI
{

	//! 武器
	struct SWeapon
	{
		Int power;
		//...略
	};

	//! 鸟类
	/** 鸟类的详细说明
		类名每个单词首字母大写
	*/
	class Bird : public IAnimal
	{
		typedef vector<SWeapon>  SWeaponVec;

	public:
		//! 翅膀结构(没有详细说明,可只写简明介绍)
		struct SWing 
		{
			Int		power;		//!< 力量
			Float	speed;		//!< 速度
			Float	width;		//!< 展开宽度
		};
	public:
		Bird(void);

		//! 单参数构造
		/** \note 单参数构造函数要声明为 explicit ，以避免不恰当的默认类型转换（有特殊需求除外）
			\param type 动物类型
		*/
		explicit Bird(EAnimalType type);

		virtual ~Bird(void);

	public:
		virtual void Eat(void);

		//! 睡觉
		/** \see Sleep(Int hours)
		*/
		virtual void Sleep(void);

		//! 睡觉
		/** 睡觉的说明
			\param hours 睡觉的时间
		*/
		void Sleep(Int hours);

		void Fly(void);

		//! 行为
		/** 根据环境执行某个行为
			\param[in]	inEnv		环境
			\param[out] OutBehave	行为
			\return 有可用行为返回true,否则返回false
			\note 传入参数用常引用，传出参数用指针，以方便预测参数将要发生的行为.
		*/
		bool Behave(const Int & inEnv, int *OutBehave);

		//! 攻击
		/** \param target 攻击目标
			\return 自己猜吧
			\warning 不能随便攻击
		*/
		bool Attack(Int target);

	private:
		SWing		m_wing; // 成员变量以 m_ 开头，如果变量名由多个单词组合，则除第一个单位外，所有单词首字母大写

		SWeaponVec	m_weapons; // 假设未来的鸟有很多武器吧 
	};
}

#endif
